Raspberry Pi 的C++交叉编译环境配置 (3)
上一节我们把交叉编译的环境配置好了,但是作为开发过程来讲尤其是从被Visual Studio开发环境懒惯了的人来讲,用编辑器开发用命令编译工作效率还是太低。幸好M$在15年推出了 visual studio code ,本质上讲它只是一款编辑器,但是配合上插件和配置脚本后可以让Linux开发和在Windows上的体验几乎一致。
一个vscode管理的项目大致包含一下结构
组成 | 作用 |
---|---|
extension | 插件,用来添加相应语言的功能 |
makefile | 编译管理工具 |
cpp source | 源文件 |
task.json | vscode 的任务管理 |
launch.json | 调试配置管理 |
keyborad.json | 快捷键 |
到vscode官网下载Ubuntu适用的最新安装包
在Ubuntu上安装后打开,界面是这样的
vscode 是以目录为项目管理单位的,点击 open folder 来打开一个目录,如果没有的话就新建一个。
首先安装插件:
启动 VS Code 快速打开功能 Ctrl+P
, 粘贴命令并回车.
|
|
cpptools是用来编辑C++代码的插件,提供代码格式化、函数补完、调试等功能。具体参见这里
插件安装完成后,用新建文件的方式创建代码,我写了一些测试代码可以点击创建后把下面这些代码粘上去。
Makefile - makefile是Unix下常用的管理工程的工具,点击这里有比较详细的教程
123456789101112131415161718192021222324252627objects = test.o list.over =CC=arm-linux-gnueabihf-gccCXX=arm-linux-gnueabihf-g++ifeq ($(ver), debug)CXXFLAGS = -c -Wall -g -Ddebug -pthread -std=c++11 -I~/raspberrypi/rootfs/usr/include -L~/raspberrypi/rootfs/lib/arm-linux-gnueabihffilename = testapp_delseCXXFLAGS = -c -Wall -O3 -pthread -std=c++11 -I~/raspberrypi/rootfs/usr/include -L~/raspberrypi/rootfs/lib/arm-linux-gnueabihffilename = testappendifall : $(objects)$(CXX) -Wall -pthread -std=c++11 -o $(filename) $^debug: $(objects)$(CXX) -g -Wall -pthread -std=c++11 -o $(filename) $^test.o : test.cpp$(CXX) $(CXXFLAGS) $< -o $@list.o: list.cpp$(CXX) $(CXXFLAGS) $< -o $@clean :rm -f $(filename) $(filename)_d *.o
list.h
1234567void printWelcome();void my_thread();
list.cpp
1234567891011void printWelcome( ){std::cout<<"Welcome"<<std::endl;}void my_thread(){puts("hello, thread!");}
test.cpp
12345678910111213141516171819202122232425262728using namespace std;int main( int argc, char* argv[]){std::thread t( [](){ puts("Hello, Lambda thread!"); });string strInfo = "";cout<<"Hello Test!"<<endl;printWelcome();float szChara = 8.0;int sum=0;for( int i=0; i<10;i++){sum+=i;}int size = sizeof(szChara);cout<< "size of char: "<< size << endl;t.join();return 0;}
源文件和makefile添加完成后,我们开始配置task.json用来管理任务
在vscode中按 Ctrl+Shift+B
然后点击
vscode会在工程目录下新建.vscode
文件夹,并声称 task.json文件。
将我配置好的task.json内容复制上去
|
|
vscode 的task 本质上是在后台执行一个command,我们利用配置task调用make 实现管理编译工程文件及其他任务,task的语法可以参考这里。
现在,我们可以利用task来实现项目的编译。
在vscode中按 Ctrl+P
调出快速命令 输入 task debug
回车进行编译,控制台中输出:
此时make工具会执行 make ver=debug debug命令来对工程进行编译,编译结束后在文件夹下生成test.o 及 testapp_d文件。
同样,可以利用task执行make clean, vscode中 按 Ctrl+P
输入 task clean,回车执行清理。
现在可以说开发编译过程非常方便了,但是还可以更方便一点。
在标题栏中找到 File - Preferrences-Keyboard shortcuts 点击后打开Keyboard shortcuts页面,点击keybindings.json
点击后弹出
在Keybindings.json中输入以下内容
|
|
keybindings.json是定义快捷键的布局文件,这里我们添加了 F7
和Ctrl+F7
分别执行 task debug
和 task remote debug
,debug任务实际上是执行带调试信息的编译任务并不是真正的debug。
好了现在可以关掉keybindings.json回到我们的工程中来,按下F7
可以看到工程现在可以自行编译了,是不是和visual studio一模一样?
由于我们现在是交叉编译,所以需要将执行文件传输到RPi上然后通过远程调试的方式来进行调试,这部分内容我们下节再讲。